package com.example.coupon.service;

import com.example.coupon.entity.Coupon;
import com.example.coupon.exception.CouponException;
import com.example.coupon.vo.AcquireTemplateRequest;
import com.example.coupon.vo.CouponTemplateSDK;
import com.example.coupon.vo.SettlementInfo;

import java.util.List;

/**
 * 用户服务相关的接口定义
 * 1、用户三类状态优惠券信息展示服务
 * 2、查看用户当前可以领取的优惠券模版
 * 3、用户领取优惠券服务
 * 4、用户消费优惠券服务 - coupon-settlement 微服务配合实现
 * @author wangbo
 * @description:
 * @date 2021/2/1910:21
 */
public interface IUserService {

    /**
     * 根据用户id和状态查询优惠券记录
     * @param userId 用户id
     * @param status 优惠券状态
     * @return {@link Coupon}s
     * @throws CouponException
     */
    List<Coupon> findCouponsByStatus(Long userId,Integer status) throws CouponException;

    /**
     * 根据用户id 查找当前可以领取的优惠券模版
     * @param userId 用户id
     * @return {@link CouponTemplateSDK}s
     * @throws CouponException
     */
    List<CouponTemplateSDK> findAvailableTemplate(Long userId) throws CouponException;

    /**
     * 用户领取优惠券
     * @param request {@link AcquireTemplateRequest}
     * @return {@link Coupon}
     * @throws CouponException
     */
    Coupon acquireTemplate(AcquireTemplateRequest request) throws CouponException;

    /**
     * 结算（核销）优惠券
     * @param info {@link SettlementInfo}
     * @return {@link SettlementInfo}
     * @throws CouponException
     */
    SettlementInfo settlement(SettlementInfo info) throws CouponException;
}
